#include "encoder.h"

#include "ti_msp_dl_config.h"

int gEncoderValue = 0;
int gEncoderCounter = 0;

void InitEncoder()
{
    // 清除串口中断标志
    NVIC_ClearPendingIRQ(GPIO_ENCODER_INT_IRQN);
    // 使能串口中断
    NVIC_EnableIRQ(GPIO_ENCODER_INT_IRQN);
}

int GetRealtimeEncoderValue()
{
    return gEncoderCounter;
}

int GetEncoderValue()
{
    return gEncoderValue;
}

void ResetEncoder()
{
    gEncoderValue = gEncoderCounter;
    gEncoderCounter = 0;
}

void GROUP1_IRQHandler()
{
    // 是否是 A 相引脚
    if (DL_GPIO_getRawInterruptStatus(GPIO_ENCODER_PORT, GPIO_ENCODER_PIN_A_PIN) == GPIO_ENCODER_PIN_A_PIN)
    {
        if (DL_GPIO_readPins(GPIO_ENCODER_PORT, GPIO_ENCODER_PIN_B_PIN) == 0) // 顺时针
            gEncoderCounter++;
        else // 逆时针
            gEncoderCounter--;
    }

    // 是否是 B 相引脚
    if (DL_GPIO_getRawInterruptStatus(GPIO_ENCODER_PORT, GPIO_ENCODER_PIN_B_PIN) == GPIO_ENCODER_PIN_B_PIN)
    {
        if (DL_GPIO_readPins(GPIO_ENCODER_PORT, GPIO_ENCODER_PIN_A_PIN) == 0) // 逆时针
            gEncoderCounter--;
        else // 顺时针
            gEncoderCounter++;
    }
        
    DL_GPIO_clearInterruptStatus(GPIO_ENCODER_PORT, GPIO_ENCODER_PIN_A_PIN);
    DL_GPIO_clearInterruptStatus(GPIO_ENCODER_PORT, GPIO_ENCODER_PIN_B_PIN);
}